import globals from "globals"
import pluginJs from "@eslint/js"
import tseslint from "typescript-eslint"
import pluginVue from "eslint-plugin-vue"

export default [
  { languageOptions: { globals: globals.browser } },
  pluginJs.configs.recommended,
  ...tseslint.configs.recommended,
  ...pluginVue.configs["flat/essential"],
  {
    rules: {
      semi: ["error", "never"], // 禁用末尾分号
      "no-multiple-empty-lines": ["error", { max: 1 }], // 限制连续空行最多为 1 行
      "no-undef": "error", // 禁止使用未声明的变量
      "no-unused-vars": ["error", { args: "none", ignoreRestSiblings: true }], // 禁止未使用的变量
      "object-curly-spacing": ["error", "always"], // 对象大括号首尾需要空格
      "vue/html-self-closing": [
        "error",
        {
          html: {
            void: "always", // 空元素始终自闭合
            normal: "never", // 非空标签不自闭合
            component: "always", // 组件始终自闭合
          },
        },
      ],
      "max-len": [
        "error",
        {
          code: 80, // 单行最大字符数
          tabWidth: 2,
          ignoreUrls: true, // 忽略 URL 长度
          ignoreStrings: true, // 忽略字符串长度
          ignoreTemplateLiterals: true, // 忽略模板字符串长度
          ignoreRegExpLiterals: true, // 忽略正则表达式长度
        },
      ],
      "vue/max-attributes-per-line": [
        "error",
        {
          singleline: 1, // 单行只允许 1 个属性
          multiline: 1, // 多行每行只允许 1 个属性
        },
      ],
      "vue/html-closing-bracket-spacing": [
        "error",
        {
          startTag: "never", // 起始标签不需要空格
          endTag: "never", // 结束标签不需要空格
          selfClosingTag: "always", // 自闭合标签的斜杠前需要空格
        },
      ],
    },
  },
]
